
/* ---------------------------------------------------------- 网络相关匹配 ---------------------------------------------------------- */
/**匹配IP地址*/
export const regIp = /\d+\.\d+\.\d+\.\d+/;

/**匹配MAC地址*/
export const regMac = /^([0-9a-fA-F]{2})(([/\s:-][0-9a-fA-F]{2}){5})$/;

/**匹配Email地址*/
export const regEmail = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;

/**匹配MAC地址或IP地址*/
export const regMacOrIp = /^(([0-9a-fA-F]{2})(([/\s:-][0-9a-fA-F]{2}){5}))|(\d+\.\d+\.\d+\.\d+)/;

/**匹配网址URL的正则表达式*/
export const regUrl = /^http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/;

/**匹配IPv6地址*/
export const regIpv6 = /([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}/;

/**匹配域名*/
export const regDomain = /^([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+[a-zA-Z]{2,}$/;

/**匹配端口号*/
export const regPort = /^([1-9]|[1-5][0-9]{1,4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/;

/**匹配子网掩码*/
export const regSubnetMask = /^((128|192|224|240|248|252|254|255)\.){3}(0|128|192|224|240|248|252|254|255)$/;

/* ---------------------------------------------------------- 字符格式匹配 ---------------------------------------------------------- */
/**匹配中文字符*/
export const regChinese = /[\u4e00-\u9fa5]/;

/**匹配双字节字符(包括汉字在内)*/
export const regDoubleByte = /[^\x00-\xff]/;

/**匹配首尾空白字符的正则表达式*/
export const regTrim = /^\s+|\s+$/g;

/**匹配特殊字符 */
export const regSpecialChar = /[`~!@#$%^&*()_+<>?:"{},.\/;'[\]]/im;

/**匹配数字和字母组合 */
export const regNumberAndLetter = /^[0-9a-zA-Z]+$/;

/**匹配中文、英文、数字和下划线 */
export const regChineseEnglishNumberUnderline = /^[\u4e00-\u9fa5_a-zA-Z0-9]+$/;

/**匹配中文、英文、数字和空格 */
export const regChineseEnglishNumberSpace = /^[\u4e00-\u9fa5_a-zA-Z0-9\s]+$/;

/**匹配中文、英文、数字和中划线 */
export const regChineseEnglishNumberDash = /^[\u4e00-\u9fa5_a-zA-Z0-9-]+$/;

/**匹配中文、英文、数字和斜杠 */
export const regChineseEnglishNumberSlash = /^[\u4e00-\u9fa5_a-zA-Z0-9/]+$/;

/**匹配中文、英文、数字和冒号 */
export const regChineseEnglishNumberColon = /^[\u4e00-\u9fa5_a-zA-Z0-9:]+$/;

/**匹配中文、英文、数字和问号 */
export const regChineseEnglishNumberQuestion = /^[\u4e00-\u9fa5_a-zA-Z0-9?]+$/;

/**匹配中文、英文、数字和感叹号 */
export const regChineseEnglishNumberExclamation = /^[\u4e00-\u9fa5_a-zA-Z0-9!]+$/;

/**匹配中文、英文、数字及下划线*/
export const regChineseEnglishNumberUnderscore = /^[\u4E00-\u9FA5A-Za-z0-9_]+$/;

/**匹配中文、英文、数字及下划线，且长度为2-18个字符*/
export const regChineseEnglishNumberUnderscoreLength = /^[\u4E00-\u9FA5A-Za-z0-9_]{2,18}$/;

/**匹配由数字、26个英文字母、中文或者下划线组成的字符串*/
export const regChineseEnglishNumberUnderscore2 = /^[\w\u4e00-\u9fa5]+$/;

/**匹配由数字、26个英文字母、中文或者下划线组成的字符串，且长度为2-18个字符*/
export const regChineseEnglishNumberUnderscoreLength2 = /^[\w\u4e00-\u9fa5]{2,18}$/;

/**匹配由数字、26个英文字母、中文或者下划线组成的字符串，且长度为6-18个字符*/
export const regChineseEnglishNumberUnderscoreLength3 = /^[\w\u4e00-\u9fa5]{6,18}$/;

/**匹配由数字、26个英文字母、中文或者下划线组成的字符串，且长度为8-16个字符*/
export const regChineseEnglishNumberUnderscoreLength4 = /^[\w\u4e00-\u9fa5]{8,16}$/;

/**匹配由数字、26个英文字母、中文或者下划线组成的字符串，且长度为6-16个字符*/
export const regChineseEnglishNumberUnderscoreLength5 = /^[\w\u4e00-\u9fa5]{6,16}$/;

/**匹配由26个英文字母组成的字符串*/
export const regEnglishAlphabet = /^[A-Za-z]+$/;

/**匹配由26个大写英文字母组成的字符串*/
export const regUppercaseEnglishAlphabet = /^[A-Z]+$/;

/**匹配由26个小写英文字母组成的字符串*/
export const regLowercaseEnglishAlphabet = /^[a-z]+$/;

/**匹配由数字和26个英文字母组成的字符串*/
export const regAlphanumeric = /^[A-Za-z0-9]+$/;

/**匹配由数字、26个英文字母或者下划线组成的字符串*/
export const regUnderscore = /^\w+$/;

/**匹配由数字、26个英文字母或者中文组成的字符串*/
export const regChineseEnglishNumber = /^[A-Za-z0-9\u4e00-\u9fa5]+$/;

/* ---------------------------------------------------------- 标签、各种文本匹配 ---------------------------------------------------------- */
/**匹配XML标签*/
export const regXmlTag = /^<(\S+)(\s[^>]+)?>(.*)<\/\1>$/;

/**匹配HTML标记*/
export const regHtmlTag = /<("[^"]*"|'[^']*'|[^'">])*>/;

/**匹配YAML格式的文本*/
export const regYaml = /^(\s*[\-\w]+\s*:\s*[\-\w]+\s*\n\s*)+$/;

/**匹配JSON格式的文本*/
export const regJson = /^[\{\[].*[\}\]]$/;

/* ---------------------------------------------------------- 日期时间匹配 ---------------------------------------------------------- */

/**匹配日期格式：yyyy-mm-dd*/
export const regDate = /\d{4}-\d{1,2}-\d{1,2}/;

/**匹配时间（hh:mm:ss）*/
export const regTime = /^([01]\d|2[0-3]):[0-5]\d:[0-5]\d$/;

/**匹配日期时间格式：yyyy-mm-dd HH:MM:SS*/
export const regDateTime = /\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}/;

/* ---------------------------------------------------------- 数字匹配 ---------------------------------------------------------- */
/**匹配十进制数字*/
export const regNumber = /^[0-9]*$/;

/**匹配十进制非负整数（正整数 + 0）*/
export const regNonNegativeInteger = /^\d+$/;

/**匹配十进制正整数*/
export const regPositiveInteger = /^[1-9]\d*$/;

/**匹配十进制负整数*/
export const regNegativeInteger = /^-[1-9]\d*$/;

/**匹配十进制非正整数（负整数 + 0）*/
export const regNonPositiveInteger = /^((-\d+)|(0+))$/;

/**匹配十进制整数*/
export const regInteger = /^-?\d+$/;

/**匹配浮点数*/
export const regFloat = /^(-?\d+)(\.\d+)?$/;

/**匹配正浮点数*/
export const regPositiveFloat = /^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$/;

/**匹配负浮点数*/
export const regNegativeFloat = /^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$/;

/**匹配非负浮点数（正浮点数 + 0）*/
export const regNonNegativeFloat = /^\d+(\.\d+)?$/;

/**匹配非正浮点数（负浮点数 + 0）*/
export const regNonPositiveFloat = /^((-\d+(\.\d+)?)|(0+(\.0+)?))$/;

/**匹配表示八进制数的字符串 */
export const regOctalNumber = /^-?0\d*.?\d*$/;

/**匹配表示十进制数的字符串 */
export const regDecimalNumber = /^-?[1-9]\d*.?\d*$/;

/**匹配表示十六进制数的字符串 */
export const regHexadecimalNumber = /^-?0x\\?[1-9,A-F]*.?[1-9,A-F]*$/;

/* ---------------------------------------------------------- 颜色匹配 ---------------------------------------------------------- */

/**匹配16进制颜色值*/
export const regHexColor = /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/;

/**匹配RGB颜色值*/
export const regRgbColor = /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/;

/**匹配RGBA颜色值*/
export const regRgbaColor = /^rgba\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3}),\s*(\d*(\.\d+)?)\)$/;

/**匹配HSL颜色值*/
export const regHslColor = /^hsl\((\d{1,3}),\s*(\d{1,3})%,\s*(\d{1,3})%\)$/;

/**匹配HSLA颜色值*/
export const regHslaColor = /^hsla\((\d{1,3}),\s*(\d{1,3})%,\s*(\d{1,3})%,\s*(\d*(\.\d+)?)\)$/;

/* ---------------------------------------------------------- 电话号码匹配 ---------------------------------------------------------- */

/**匹配电话号码（支持带区号和不带区号）*/
export const regTelephone = /^(\d{3,4}-)?\d{7,8}$/;

/**匹配中国大陆手机号码（支持+86和86开头）*/
export const regMainlandPhone = /^(\+86|86)?1[3-9]\d{9}$/;

/**匹配中国大陆固定电话号码*/
export const regMainlandTelephone = /^0\d{2,3}-?\d{7,8}$/;

/**匹配中国大陆电信手机号码*/
export const regMainlandTelecomPhone = /^(\+86|86)?1(33|49|53|7[37]|8[019])\d{8}$/;

/**匹配中国大陆联通手机号码*/
export const regMainlandUnicomPhone = /^(\+86|86)?1(3[0-2]|4[5]|5[56]|6[6]|7[156]|8[56])\d{8}$/;

/**匹配中国大陆移动手机号码*/
export const regMainlandMobilePhone = /^(\+86|86)?1(3[4-9]|4[7]|5[012789]|6[5]|7[012345678]|8[23478]|9[578])\d{8}$/;

/**匹配中国邮政编码*/
export const regPostalCode = /[1-9]\d{5}(?!\d)/;

/**匹配中国大陆邮政编码*/
export const regMainlandPostalCode = /^[1-9]\d{5}$/;

/* ---------------------------------------------------------- 互联网账号匹配 ---------------------------------------------------------- */

/**匹配腾讯QQ号*/
export const regQq = /[1-9][0-9]{4,}/;

/**匹配微信号*/
export const regWechat = /^[a-zA-Z][-_a-zA-Z0-9]{5,19}$/;

/**匹配微博UID*/
export const regWeiboUid = /^[a-zA-Z0-9_]{1,}$/;

/**匹配新浪微博账号*/
export const regSinaWeibo = /^[a-zA-Z0-9_]{1,}$/;

/**匹配百度账号*/
export const regBaidu = /^[a-zA-Z0-9_-]{6,18}$/;

/**匹配支付宝账号*/
export const regAlipay = /^[a-zA-Z0-9_-]{5,16}$/;

/**匹配淘宝账号*/
export const regTaobao = /^[a-zA-Z0-9_-]{1,}$/;

/**匹配京东账号*/
export const regJd = /^[a-zA-Z0-9_-]{4,20}$/;

/**匹配苏宁账号*/
export const regSuning = /^[a-zA-Z0-9_-]{1,}$/;

/**匹配唯品会账号*/
export const regVph = /^[a-zA-Z0-9_-]{1,}$/;

/**匹配当当账号*/
export const regDangdang = /^[a-zA-Z0-9_-]{1,}$/;

/**匹配网易邮箱账号*/
export const reg163Email = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;

/**匹配QQ邮箱账号*/
export const regQqEmail = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;

/**匹配新浪邮箱账号*/
export const regSinaEmail = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;

/**匹配阿里云账号*/
export const regAliyun = /^[a-zA-Z0-9_-]{1,}$/;

/**匹配华为云账号*/
export const regHuaweiCloud = /^[a-zA-Z0-9_-]{1,}$/;

/**匹配腾讯云账号*/
export const regTencentCloud = /^[a-zA-Z0-9_-]{1,}$/;

/**匹配京东云账号*/
export const regJdCloud = /^[a-zA-Z0-9_-]{1,}$/;

/**匹配AWS账号*/
export const regAws = /^[a-zA-Z0-9_-]{1,}$/;

/**匹配Azure账号*/
export const regAzure = /^[a-zA-Z0-9_-]{1,}$/;

/**匹配Twitter账号*/
export const regTwitter = /^[a-zA-Z0-9_]{1,15}$/;

/**匹配Facebook账号*/
export const regFacebook = /^[a-zA-Z0-9._-]{5,}$/;

/**匹配LinkedIn账号*/
export const regLinkedIn = /^[a-zA-Z0-9._-]{5,}$/;

/**匹配GitHub账号*/
export const regGitHub = /^[a-zA-Z0-9_-]{1,39}$/;

/**匹配GitLab账号*/
export const regGitLab = /^[a-zA-Z0-9._-]{1,64}$/;

/**匹配Bitbucket账号*/
export const regBitbucket = /^[a-zA-Z0-9._-]{1,39}$/;

/**匹配Docker Hub账号*/
export const regDockerHub = /^[a-zA-Z0-9._-]{4,}$/;

/**匹配Google账号*/
export const regGoogle = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;

/**匹配Microsoft账号*/
export const regMicrosoft = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;

/**匹配Apple账号*/
export const regApple = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;

/**匹配Amazon账号*/
export const regAmazon = /^[a-zA-Z0-9._-]{3,}$/;

/**匹配Netflix账号*/
export const regNetflix = /^[a-zA-Z0-9._-]{4,}$/;

/**匹配Hulu账号*/
export const regHulu = /^[a-zA-Z0-9._-]{4,}$/;

/**匹配Spotify账号*/
export const regSpotify = /^[a-zA-Z0-9._-]{4,}$/;

/**匹配Twitch账号*/
export const regTwitch = /^[a-zA-Z0-9._-]{4,}$/;

/**匹配Reddit账号*/
export const regReddit = /^[a-zA-Z0-9_-]{3,20}$/;

/**匹配Discord账号*/
export const regDiscord = /^[a-zA-Z0-9._-]{2,32}#[0-9]{4}$/;

/**匹配Slack账号*/
export const regSlack = /^[a-zA-Z0-9._-]{1,21}$/;

/**匹配Zoom账号*/
export const regZoom = /^[a-zA-Z0-9._-]{3,}$/;

/**匹配Instagram账号*/
export const regInstagram = /^[a-zA-Z0-9._-]{1,30}$/;

/**匹配Snapchat账号*/
export const regSnapchat = /^[a-zA-Z0-9._-]{1,}$/;

/**匹配Pinterest账号*/
export const regPinterest = /^[a-zA-Z0-9._-]{1,}$/;

/**匹配TikTok账号*/
export const regTikTok = /^[a-zA-Z0-9._-]{1,}$/;

/**匹配Telegram账号*/
export const regTelegram = /^[a-zA-Z0-9._-]{1,}$/;

/**匹配WhatsApp账号*/
export const regWhatsApp = /^[a-zA-Z0-9._-]{1,}$/;

/**匹配Line账号*/
export const regLine = /^[a-zA-Z0-9._-]{1,}$/;

/**匹配Viber账号*/
export const regViber = /^[a-zA-Z0-9._-]{1,}$/;

/**匹配Signal账号*/
export const regSignal = /^[a-zA-Z0-9._-]{1,}$/;


/* ---------------------------------------------------------- 证件号码匹配 ---------------------------------------------------------- */

/**匹配身份证号码*/
export const regIdCard = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;

/**匹配中国大陆身份证号码（15位）*/
export const regMainlandIdCard = /^[1-9]\d{5}\d{2}(0[1-9]|1[0-2])([0-2]\d|3[0-1])\d{3}$/;

/**匹配车牌号码*/
export const regLicensePlate = /^[\u4e00-\u9fa5]{1}[A-Z]{1}[A-Z_0-9]{5}$/

/**匹配中国大陆护照号码*/
export const regMainlandPassport = /^1[45]\d{7}$|^[P|p|S|s]\d{7}$|^[S|s|G|g|E|e]\d{8}$|^[Gg|Tt|Ss|Ll|Qq|Dd|Aa|Ff]\d{8}$/;

/**匹配中国大陆车牌号码（新能源+非新能源）*/
export const regMainlandLicensePlate = /^[\u4e00-\u9fa5]{1}[A-Z]{1}[A-Z_0-9]{5}[DF]$|^[\u4e00-\u9fa5]{1}[A-Z]{1}[A-Z_0-9]{6}$/;

/**匹配中国大陆身份证号码（18位，支持港澳台）*/
export const regMainlandIdCard2 = /^([1-9]\d{5}(18|19|([23]\d))\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dX])|([A-Z]\d{6}\([0-9A]\))$/;

/**匹配中国大陆港澳居民来往内地通行证*/
export const regMainlandHKMacaoPass = /^[HMhm]{1}([0-9]{10}|[0-9]{8})$/;

/**匹配中国大陆台湾居民来往大陆通行证*/
export const regMainlandTaiwanPass = /^[0-9]{8}$/;

/**匹配中国大陆军官离退休证*/
export const regMainlandOfficerRetireCard = /^[\u4e00-\u9fa5]{1}(字第)?[0-9a-zA-Z]{4,}$/;

/**匹配中国大陆社会保障卡*/
export const regMainlandSocialSecurityCard = /^[1-9]\d{7}((0[1-9])|(1[0-2]))(([012][1-9])|3[0-1])\d{3}$/

/**匹配中国大陆军官证*/
export const regMainlandOfficerCard = /^[\u4e00-\u9fa5]{1}[0-9]{6}[\u4e00-\u9fa5]{1}$/;

/**匹配中国大陆士兵证*/
export const regMainlandSoldierCard = /^[0-9]{8}$/;